<?php
/**
 * Copyright (c) 2008-2011 Submit Consulting. Lima-Peru. All Right Reserved.
 * @author Ing. Angel Sullon M. (asullom@hotmail.com)
 * Created: 21.SEP.2000
 * Last Modify: 11.AGO.2011
 * Description of ProyectoData: CRUD
 */
class ProyectoData {
	//	ProyectoId,
	//	Nombre,
	//	Alcance,
	//	FechaInicio,
	//	FechaTermino,
	//	Url LiderRef FechaAlta

	public function create(Proyecto $nuevo) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$tran->begin();
			$qry=" SELECT COALESCE(MAX(ProyectoId)+1,1) AS Id FROM Proyecto ";
			$rs=mysql_query($qry) or die("<p class=error>".mysql_error()." table Proyecto</p>");
			if( $row=mysql_fetch_array($rs) )
			$nuevo->setProyectoId( $row["Id"] );
			$qry=" INSERT INTO Proyecto
            	(ProyectoId,Nombre,Alcance,FechaInicio,FechaTermino,
            	Url, Lider,UrlRepositorio, Estado,FechaAlta)
                values(?,?,?,str_to_date(?,'%d/%c/%Y'),str_to_date(?,'%d/%c/%Y'),    ?,?, ?,?,now()) ";
			$pre = new PrepareQuery($qry);
			$pre->set($nuevo->getProyectoId());
			$pre->set($nuevo->getNombre());
			$pre->set($nuevo->getAlcance());
			$pre->set($nuevo->getFechaInicio());
			$pre->set($nuevo->getFechaTermino());
			$pre->set($nuevo->getUrl());
                        $pre->set($nuevo->getLiderRef()->getUsuarioId());
                        $pre->set($nuevo->getUrlRepositorio());
                        $pre->set($nuevo->getEstado());
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Proyecto", E_USER_ERROR. "</p>");;
			$r=mysql_affected_rows();
			$tran->commit();
		}catch(Exception $e){
			$tran->rollback();
			throw new GlobalException("ProyectoData.create ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function listByFilter($filter) {//CRUD create, reader, update, delete
		$tran= new ConnectDb();
		$tran->getConnection();
		$li=array();
		try{
			$qry=" SELECT u.ProyectoId,u.Nombre,u.Alcance,
                            DATE_FORMAT(u.FechaInicio, '%d/%c/%Y') as FechaInicio,
                            DATE_FORMAT(u.FechaTermino, '%d/%c/%Y') as FechaTermino,
                            u.Url, 
                             u.Lider,UrlRepositorio, Estado, u.UrlRepositorio, u.Estado, DATE_FORMAT(u.FechaAlta, '%d/%c/%Y') as FechaAlta
	,
(SELECT  COALESCE( SUM(w.Esfuerzo) , 0 )
	FROM  Item w, Producto p, Iteracion i
	WHERE w.productoId=p.productoId AND p.iteracionId=i.iteracionId AND i.proyectoId=u.proyectoId
	AND w.ItemTipo LIKE  '%' AND w.Estado IN ('ToDo','New') ) AS EsfuerzoPendiente
	,
(SELECT  COALESCE( SUM(w.Esfuerzo) , 0 )
	FROM  Item w, Producto p, Iteracion i
	WHERE w.productoId=p.productoId AND p.iteracionId=i.iteracionId AND i.proyectoId=u.proyectoId
	AND w.ItemTipo LIKE  '%' AND w.Estado IN ('Open','InProgress') ) AS EsfuerzoEnCurso
	,
(SELECT  COALESCE( SUM(w.Esfuerzo) , 0 )
	FROM  Item w, Producto p, Iteracion i
	WHERE w.productoId=p.productoId AND p.iteracionId=i.iteracionId AND i.proyectoId=u.proyectoId
	AND w.ItemTipo LIKE  '%' AND w.Estado IN ('Done','Closed','Approved') ) AS EsfuerzoCompletado 
	,
(SELECT  COALESCE( SUM(w.Esfuerzo) , 0 )
	FROM  Item w, Producto p, Iteracion i
	WHERE w.productoId=p.productoId AND p.iteracionId=i.iteracionId AND i.proyectoId=u.proyectoId
	AND w.ItemTipo LIKE  '%' AND w.Estado IN ('ToDo','New','Open','InProgress','Done','Closed','Approved') ) AS EsfuerzoTotal
                FROM Proyecto u
                WHERE  UPPER(u.Nombre) LIKE UPPER(?)
                order by u.FechaInicio, u.Nombre"; //AND w.ItemTipo LIKE  '%'
			$pre = new PrepareQuery($qry);
			$pre->set($filter."%");
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Proyecto", E_USER_ERROR. "</p>");
			$u=0;
			while( $row=mysql_fetch_array($rs) ) {
				$d=new Proyecto();
				$d->setProyectoId($row["ProyectoId"]);
				$d->setNombre($row["Nombre"]);
				$d->setAlcance($row["Alcance"]);
				$d->setFechaInicio($row["FechaInicio"]);
				$d->setFechaTermino($row["FechaTermino"]);
				$d->setUrl($row["Url"]);
                                $d->getLiderRef()->setUsuarioId($row["Lider"]);
                                $d->setUrlRepositorio($row["UrlRepositorio"]);
                                $d->setEstado($row["Estado"]);
                                //como la relacion con Usuario es null, entonces 
                                $qry=" SELECT u.UsuarioId,COALESCE(u.Foto,'SinFoto.jpg') as Foto,u.Nombres,u.Cargo,u.EMail,
                                        u.Celular,u.Usuario,u.Clave,u.Privilegio,u.CuentaActiva,
                                        u.ForzarClave,DATE_FORMAT(u.FechaAlta, '%d/%c/%Y') as FechaAlta
                                        FROM Usuario u
                                        WHERE  u.UsuarioId=?";
                                                $pre = new PrepareQuery($qry);
                                                $pre->set($row["Lider"]);
                                                $rs2=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");;
                                                if( $row2=mysql_fetch_array($rs2) ) {
                                                        $d->getLiderRef()->setNombres($row2["Nombres"]);
                                                }

                                
                                $d->setFechaAlta($row["FechaAlta"]);
                                $d->setEsfuerzoPendiente($row["EsfuerzoPendiente"]);
                                $d->setEsfuerzoEnCurso($row["EsfuerzoEnCurso"]);
                                $d->setEsfuerzoCompletado($row["EsfuerzoCompletado"]);
                                $d->setEsfuerzoTotal($row["EsfuerzoTotal"]);
                                $li[$u++]=$d;
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("ProyectoData.listByFilter ".$e->getMessage());
		}
		$tran->close();
		return $li;
	}

	public function findByPk($id) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$d=new Proyecto();
		try{
			$qry=" SELECT u.ProyectoId,u.Nombre,u.Alcance,DATE_FORMAT(u.FechaInicio, '%d/%c/%Y') as FechaInicio,
            	DATE_FORMAT(u.FechaTermino, '%d/%c/%Y') as FechaTermino,
                u.Url,
                u.Lider, u.UrlRepositorio, u.Estado, DATE_FORMAT(u.FechaAlta, '%d/%c/%Y') as FechaAlta
                FROM Proyecto u
                WHERE  u.ProyectoId=?";
			$pre = new PrepareQuery($qry);
			$pre->set($id);
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Proyecto", E_USER_ERROR. "</p>");;
			if( $row=mysql_fetch_array($rs) ) {
				$d->setProyectoId($row["ProyectoId"]);
				$d->setNombre($row["Nombre"]);
				$d->setAlcance($row["Alcance"]);
				$d->setFechaInicio($row["FechaInicio"]);
				$d->setFechaTermino($row["FechaTermino"]);
				$d->setUrl($row["Url"]);
                                $d->setUrlRepositorio($row["UrlRepositorio"]);
                                $d->setEstado($row["Estado"]);
                                $d->getLiderRef()->setUsuarioId($row["Lider"]);
                                $d->setFechaAlta($row["FechaAlta"]);
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("ProyectoData.findByPk ".$e->getMessage());
		}
		$tran->close();
		return $d;
	}

	public function update(Proyecto $dato) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$qry=" UPDATE Proyecto SET
                Nombre = ?,Alcance = ?,FechaInicio = str_to_date(?,'%d/%c/%Y'),
            	FechaTermino = str_to_date(?,'%d/%c/%Y'),Url = ?, Lider = ?, UrlRepositorio = ?, Estado = ?
                WHERE ProyectoId=?";
			$pre = new PrepareQuery($qry);
			$pre->set($dato->getNombre());
			$pre->set($dato->getAlcance());
			$pre->set($dato->getFechaInicio());
			$pre->set($dato->getFechaTermino());
			$pre->set($dato->getUrl());
			$pre->set( $dato->getLiderRef()->getUsuarioId() ? $dato->getLiderRef()->getUsuarioId() : NULL); // $dato->getLiderRef()->getUsuarioId() ? $dato->getLiderRef()->getUsuarioId() : NULL
                        $pre->set($dato->getUrlRepositorio());
                        $pre->set($dato->getEstado());
			$pre->set($dato->getProyectoId());
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Proyecto", E_USER_ERROR. "</p>");
			$r=mysql_affected_rows();
		}catch(Exception $e){
			throw new GlobalException("ProyectoData.update ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function delete($id) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$qry=" DELETE FROM Proyecto WHERE ProyectoId=? ";
			$pre = new PrepareQuery($qry);
			$pre->set($id);
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Proyecto", E_USER_ERROR. "</p>");;
			$r=mysql_affected_rows();
		}catch(Exception $e){
			throw new GlobalException("ProyectoData.delete ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

}
?>